#include "swatchdog.h"

#include <iostream>
#include <chrono>

void swatchdog::reset()
{
    std::lock_guard<std::mutex> lock(mtx);  // 确保线程安全
    last_reset_time = std::time(nullptr);

}

void swatchdog::feed()
{
    reset();  // 喂狗与重置计时器等效
}

void swatchdog::stop()
{
    running = false;  // 设置运行标志为false，停止超时检测
}

void swatchdog::start()
{
    watch_thread = std::thread(&swatchdog::watch, this);  // 创建新线程执行watch函数
}

void swatchdog::join()
{
    if (watch_thread.joinable()) {
        watch_thread.join();
    }
}

void swatchdog::watch()
{
    while (running) {
        std::this_thread::sleep_for(std::chrono::seconds(1));  // 每秒检查一次
        check();
    }
}

void swatchdog::check()
{
    std::lock_guard<std::mutex> lock(mtx);  // 确保线程安全
    if (std::difftime(std::time(nullptr), last_reset_time) >= timeout_limit) {
        if (callback) {
            callback();  // 超时，执行回调函数
        }
        last_reset_time = std::time(nullptr);  // 重置时间，防止连续超时
    }
}
